import re

def modify_pair_values(file_path, model_name, target_index, new_first_val, new_second_val):
    # 读取文件内容
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    
    try:
        # 1. 定位模型名称位置
        start_index = content.index(model_name)
        print(f"找到模型 {model_name}，起始位置: {start_index}")
        
        # 2. 定位对应的listOf(...)块
        list_start = content.find('listOf(', start_index)
        if list_start == -1:
            print("未找到对应的listOf(...)结构")
            return False
        
        # 计算括号平衡找到listOf的结束位置
        balance = 1
        list_end = list_start + len('listOf(')
        while list_end < len(content) and balance > 0:
            if content[list_end] == '(':
                balance += 1
            elif content[list_end] == ')':
                balance -= 1
            list_end += 1
        
        # 提取listOf内部内容（包含括号）
        list_content = content[list_start:list_end]
        
        # 3. 查找所有Pair并定位到目标索引（从1开始）
        pattern = r'(Pair\(\s*)([^,]+?)(\s*,\s*)([^)]+?)(\s*\))'
        matches = list(re.finditer(pattern, list_content))
        
        if target_index < 1 or target_index > len(matches):
            print(f"目标索引 {target_index} 超出范围，共找到 {len(matches)} 个Pair")
            return False
        
        # 4. 构建新的Pair字符串（保持原有格式）
        match = matches[target_index - 1]
        # 保留原有格式的前缀和后缀（空格等）
        new_pair = (f"{match.group(1)}{new_first_val}{match.group(3)}{new_second_val}{match.group(5)}")
        
        # 5. 替换list_content中的目标Pair
        updated_list = (
            list_content[:match.start()] + 
            new_pair + 
            list_content[match.end():]
        )
        
        # 6. 更新整个文件内容
        updated_content = (
            content[:list_start] + 
            updated_list + 
            content[list_end:]
        )
        
        # 7. 写回文件
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(updated_content)
        
        print(f"已成功修改第 {target_index} 个Pair的值")
        return True
        
    except ValueError:
        print(f"未找到模型名称: {model_name}")
        return False
    except Exception as e:
        print(f"修改过程出错: {str(e)}")
        return False

# # 使用示例
# if __name__ == "__main__":
#     # 配置参数
#     file_path = r"D:\data\android\demo\aidc\x1ScannerApp\decoder\src\main\java\com\action\ai\x1\decoder\model\ModelQuantParam.kt"  # 替换为你的文件路径
#     model_name = "AreaType.QR_CODE_V11"  # 目标模型名称
#     target_index = 2  # 要修改的Pair索引（1开始）
#     new_first_val = "0.00002f"  # 新的第一个值
#     new_second_val = "100"  # 新的第二个值
    
#     # 执行修改
#     modify_pair_values(file_path, model_name, target_index, new_first_val, new_second_val)
